
export default{
	namespaced:true,  //识别带有下划线命名的属性 user-name --> userName
	//数据属性 == data
	state:()=>({
		//购物车列表数组
		cart:JSON.parse(uni.getStorageSync('cart') ||'[]')
	}),
	//写方法  methods
	mutations:{
		//state 上面的数据属性  goods添加的商品到购车
		addToCart(state,goods){
			//查找的匹配的元素并返回
			const res = state.cart.find(x=>x.goodsId  === goods.goodsId)
			//找不到返回undefined 找到返回对象
			if(!res){
				state.cart.push(goods)
			}else{
				res.goodsCount++
			}
			//vuex添加购物车数据是同时往浏览器中缓存
			this.commit('m_cart/saveToStorage')
		},
		// 自定义函数 持久化vuex中的购物车数据到localStorage中
		saveToStorage(state){
			// 将对象转化为json格式的字符串
			uni.setStorageSync('cart',JSON.stringify(state.cart))
		},
		//修改苟购车状态
		updateGoodsCar(state,goods){
			//判断当前点击勾选商品id和购物车数据
			const findres = state.cart.find(x => x.goodsId === goods.id)
			if(findres){
				findres.goodsStates = !goods.state
			}
			this.commit('m_cart/saveToStorage')
		},
		//修改商品购物车数量
		updategoodscart(state,goods){
			const findres = state.cart.find(x => x.goodsId === goods.id)
			if(findres){
				findres.goodsCount = goods.goodsCount
				this.commit('m_cart/saveToStorage')
			}
		},
		removeGoodscart(state,goodsId){
			//返回过滤后的数组  
			state.cart = state.cart.filter(x => x.goodsId !== goodsId)
			this.commit('m_cart/saveToStorage')
		},
		//修改所有的商品勾选状态 goodsState
		updateAllGoodsState(state,isFullChecked){
			state.cart.forEach(x=>x.goodsStates = isFullChecked)
			this.commit('m_cart/saveToStorage')
		}	
	},
	//获取属性的值
	getters:{
		total(state){
			// let c = 0;
			// state.cart.forEach(x=> c += x.goodsCount)
			// return c
			//js提供数组方法
			//第一个值计算后的结果  第二个值遍历数组中的每一项数据
			return state.cart.reduce((sum,item)=> sum += item.goodsCount,0)
		},
		//获取选中的数量
		checkCount(state){
			// 1.获取选中的商品 goodsStates
			// 2.拿到商品数量属性
			// 3.求和返回
			//再使用 reduce 方法，将已勾选的商品总数量进行累加
			// reduce() 的返回值就是已勾选的商品的总数量
			return state.cart.filter(x => x.goodsStates).reduce((total, item) => total += item.goodsCount, 0)	
		},
		//计算商品总价 
		//goodsStates goodsPrice goodsCount
		settleGoodsAmount(state){
			//1.获取选中状态
			return state.cart.filter(x => x.goodsStates)
									.reduce((total, item) => total += item.goodsCount * item.goodsPrice, 0)
									.toFixed(2)
		}
			
	}
}